
<!DOCTYPE HTML>
<html lang="" >
    <head>
        <meta charset="UTF-8">
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
        <title>RxJava · GitBook</title>
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="description" content="">
        <meta name="generator" content="GitBook 3.2.2">
        
        
        
    
    <link rel="stylesheet" href="gitbook/style.css">

    
            
                
                <link rel="stylesheet" href="gitbook/gitbook-plugin-highlight/website.css">
                
            
                
                <link rel="stylesheet" href="gitbook/gitbook-plugin-search/search.css">
                
            
                
                <link rel="stylesheet" href="gitbook/gitbook-plugin-fontsettings/website.css">
                
            
        

    

    
        
    
        
    
        
    
        
    
        
    
        
    

        
    
    
    <meta name="HandheldFriendly" content="true"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <link rel="apple-touch-icon-precomposed" sizes="152x152" href="gitbook/images/apple-touch-icon-precomposed-152.png">
    <link rel="shortcut icon" href="gitbook/images/favicon.ico" type="image/x-icon">

    
    <link rel="next" href="lang.html" />
    
    
    <link rel="prev" href="mvp.html" />
    

    </head>
    <body>
        
<div class="book">
    <div class="book-summary">
        
            
<div id="book-search-input" role="search">
    <input type="text" placeholder="Type to search" />
</div>

            
                <nav role="navigation">
                


<ul class="summary">
    
    

    

    
        
        <li class="header">----安卓 UI----</li>
        
        
    
        <li class="chapter " data-level="1.1" data-path="./">
            
                <a href="./">
            
                    
                    Introduction
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2" data-path="view.html">
            
                <a href="view.html">
            
                    
                    自定义控件和measure
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.3" data-path="canvas-paint.html">
            
                <a href="canvas-paint.html">
            
                    
                    draw和canvas，paint详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.4" data-path="anim.html">
            
                <a href="anim.html">
            
                    
                    动画
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5" data-path="notify.html">
            
                <a href="notify.html">
            
                    
                    notify系列库
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.6" data-path="loading.html">
            
                <a href="loading.html">
            
                    
                    loading系列库
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.7" data-path="status-ui.html">
            
                <a href="status-ui.html">
            
                    
                    StatusUI系列库
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.8" data-path="touch-scroll.html">
            
                <a href="touch-scroll.html">
            
                    
                    滑动
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.9" data-path="layout.html">
            
                <a href="layout.html">
            
                    
                    Layout
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.10" data-path="textview.html">
            
                <a href="textview.html">
            
                    
                    TextView
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11" data-path="drawable.html">
            
                <a href="drawable.html">
            
                    
                    Drawable
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12" data-path="item-template.html">
            
                <a href="item-template.html">
            
                    
                    列表Adapter模板化
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.13" data-path="recyclerview.html">
            
                <a href="recyclerview.html">
            
                    
                    RecyclerView全解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.14" data-path="design.html">
            
                <a href="design.html">
            
                    
                    MeterialDesign详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.15" data-path="component.html">
            
                <a href="component.html">
            
                    
                    AyoComponent基础库--Activity和Fragment
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.16" data-path="systembartint.html">
            
                <a href="systembartint.html">
            
                    
                    SystembarTint
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.17" data-path="permission-ask.html">
            
                <a href="permission-ask.html">
            
                    
                    权限控制
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.18" data-path="keyboard.html">
            
                <a href="keyboard.html">
            
                    
                    小键盘
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.19" data-path="notification.html">
            
                <a href="notification.html">
            
                    
                    Notification
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">----安卓 foundation----</li>
        
        
    
        <li class="chapter " data-level="2.1" data-path="mvp.html">
            
                <a href="mvp.html">
            
                    
                    MVP
            
                </a>
            

            
        </li>
    
        <li class="chapter active" data-level="2.2" data-path="rxjava.html">
            
                <a href="rxjava.html">
            
                    
                    RxJava
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.3" data-path="lang.html">
            
                <a href="lang.html">
            
                    
                    常用工具类
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.4" data-path="http.html">
            
                <a href="http.html">
            
                    
                    http
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.5" data-path="xml.html">
            
                <a href="xml.html">
            
                    
                    xml解析
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.6" data-path="json-reporter.html">
            
                <a href="json-reporter.html">
            
                    
                    Json解析
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.7" data-path="inject.html">
            
                <a href="inject.html">
            
                    
                    ButterKnife
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.8" data-path="thread.html">
            
                <a href="thread.html">
            
                    
                    安卓线程和looper
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.9" data-path="process.html">
            
                <a href="process.html">
            
                    
                    多进程
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.10" data-path="eventbus.html">
            
                <a href="eventbus.html">
            
                    
                    EventBus
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.11" data-path="db.html">
            
                <a href="db.html">
            
                    
                    数据库和ContentProvider
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.12" data-path="job.html">
            
                <a href="job.html">
            
                    
                    定时任务
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.13" data-path="service.html">
            
                <a href="service.html">
            
                    
                    service
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.14" data-path="opt-mem.html">
            
                <a href="opt-mem.html">
            
                    
                    内存优化
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.15" data-path="opt-network.html">
            
                <a href="opt-network.html">
            
                    
                    网络优化
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.16" data-path="opt-anr.html">
            
                <a href="opt-anr.html">
            
                    
                    anr排查
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.17" data-path="opt-ui.html">
            
                <a href="opt-ui.html">
            
                    
                    UI卡顿优化
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.18" data-path="opt-launch.html">
            
                <a href="opt-launch.html">
            
                    
                    启动优化
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.19" data-path="opt-launch.html">
            
                <a href="opt-launch.html">
            
                    
                    混淆
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.20" data-path="hotfix.html">
            
                <a href="hotfix.html">
            
                    
                    热补丁混淆
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.21" data-path="aar.html">
            
                <a href="aar.html">
            
                    
                    aar相关
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.22" data-path="route.html">
            
                <a href="route.html">
            
                    
                    Route路由
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.23" data-path="modules.html">
            
                <a href="modules.html">
            
                    
                    分模块，组件化，插件化
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">----Gradle----</li>
        
        
    
        <li class="chapter " data-level="3.1" data-path="gradle.html">
            
                <a href="gradle.html">
            
                    
                    gradle基本配置
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.2" data-path="gradle-plugin.html">
            
                <a href="gradle-plugin.html">
            
                    
                    gradle插件开发
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">----工具----</li>
        
        
    
        <li class="chapter " data-level="4.1" data-path="repos.html">
            
                <a href="repos.html">
            
                    
                    优秀博客，开源项目
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.2" data-path="packs.html">
            
                <a href="packs.html">
            
                    
                    自动打包，多渠道打包
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.3" data-path="gist.html">
            
                <a href="gist.html">
            
                    
                    代码片段和常见问题
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.4" data-path="stetho.html">
            
                <a href="stetho.html">
            
                    
                    stetho
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.5" data-path="fabric.html">
            
                <a href="fabric.html">
            
                    
                    fabric
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.6" data-path="app-update.html">
            
                <a href="app-update.html">
            
                    
                    自动升级
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.7" data-path="bugsnags.html">
            
                <a href="bugsnags.html">
            
                    
                    日志和崩溃统计
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.8" data-path="mail.html">
            
                <a href="mail.html">
            
                    
                    发邮件辅助接口
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.9" data-path="socail.html">
            
                <a href="socail.html">
            
                    
                    第三方登录和分享
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.10" data-path="pay-alipay.html">
            
                <a href="pay-alipay.html">
            
                    
                    支付宝支付
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.11" data-path="pay-wx.html">
            
                <a href="pay-wx.html">
            
                    
                    微信支付
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.12" data-path="umeng.html">
            
                <a href="umeng.html">
            
                    
                    友盟统计
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.13" data-path="push-jpush.html">
            
                <a href="push-jpush.html">
            
                    
                    推送-极光
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.14" data-path="push-xiaomi.html">
            
                <a href="push-xiaomi.html">
            
                    
                    推送-小米
            
                </a>
            

            
        </li>
    

    

    <li class="divider"></li>

    <li>
        <a href="https://www.gitbook.com" target="blank" class="gitbook-link">
            Published with GitBook
        </a>
    </li>
</ul>


                </nav>
            
        
    </div>

    <div class="book-body">
        
            <div class="body-inner">
                
                    

<div class="book-header" role="navigation">
    

    <!-- Title -->
    <h1>
        <i class="fa fa-circle-o-notch fa-spin"></i>
        <a href="." >RxJava</a>
    </h1>
</div>




                    <div class="page-wrapper" tabindex="-1" role="main">
                        <div class="page-inner">
                            
<div id="book-search-results">
    <div class="search-noresults">
    
                                <section class="normal markdown-section">
                                
                                <h1 id="rxjava">RxJava</h1>
<p>github&#x5730;&#x5740;&#xFF1A;<a href="https://github.com/cowthan/AyoRxJava" target="_blank">https://github.com/cowthan/AyoRxJava</a></p>
<h1 id="ayorxjava">AyoRxJava</h1>
<p>&#x6574;&#x7406;&#x4E00;&#x4E0B;Rx&#x76F8;&#x5173;&#x7684;&#x6587;&#x7AE0;&#x548C;demo&#xFF0C;&#x7ED9;&#x4F17;&#x591A;Rx&#x7684;&#x7B2C;&#x4E09;&#x65B9;&#x5E93;&#x627E;&#x4E2A;&#x5F52;&#x5C5E;&#xFF0C;&#x592A;TM&#x4E71;&#x4E86;</p>
<ul>
<li><a href="http://www.jianshu.com/p/7e28c8216c7d" target="_blank">http://www.jianshu.com/p/7e28c8216c7d</a></li>
<li><a href="http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/0907/6604.html" target="_blank">http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/0907/6604.html</a></li>
<li><a href="http://reactivex.io/documentation/operators/repeat.html" target="_blank">http://reactivex.io/documentation/operators/repeat.html</a></li>
<li><a href="http://blog.csdn.net/maplejaw_/article/details/52396175" target="_blank">http://blog.csdn.net/maplejaw_/article/details/52396175</a></li>
</ul>
<p><a href="https://github.com/ReactiveX/RxJava" target="_blank">https://github.com/ReactiveX/RxJava</a></p>
<p><a href="https://github.com/akarnokd/RxJavaCompletable" target="_blank">https://github.com/akarnokd/RxJavaCompletable</a></p>
<p><a href="https://github.com/ReactiveX/RxAndroid" target="_blank">https://github.com/ReactiveX/RxAndroid</a></p>
<p><a href="https://github.com/trello/RxLifecycle" target="_blank">https://github.com/trello/RxLifecycle</a></p>
<p><a href="https://github.com/JakeWharton/RxBinding" target="_blank">https://github.com/JakeWharton/RxBinding</a></p>
<p><a href="https://github.com/jiang111/RxJavaApp" target="_blank">https://github.com/jiang111/RxJavaApp</a></p>
<p><a href="https://github.com/cn-ljb/rxjava_for_android" target="_blank">https://github.com/cn-ljb/rxjava_for_android</a></p>
<p><a href="https://github.com/lzyzsd/Awesome-RxJava" target="_blank">https://github.com/lzyzsd/Awesome-RxJava</a></p>
<p><a href="https://github.com/CharonChui/AndroidNote/tree/master/Android%E5%8A%A0%E5%BC%BA" target="_blank">https://github.com/CharonChui/AndroidNote/tree/master/Android%E5%8A%A0%E5%BC%BA</a></p>
<p><a href="http://toutiao.io/posts/rjvyix" target="_blank">http://toutiao.io/posts/rjvyix</a></p>
<p><a href="http://gold.xitu.io/entry/57b12cf4165abd00542a3ee1?from=timeline&amp;isappinstalled=1" target="_blank">http://gold.xitu.io/entry/57b12cf4165abd00542a3ee1?from=timeline&amp;isappinstalled=1</a></p>
<p>RxJava&#x4E2D;backpressure&#x8FD9;&#x4E2A;&#x6982;&#x5FF5;&#x7684;&#x7406;&#x89E3;   <a href="http://www.dundunwen.com/article/275b1d92-f9da-4bb8-b111-3aa8a6ace245.html" target="_blank">http://www.dundunwen.com/article/275b1d92-f9da-4bb8-b111-3aa8a6ace245.html</a></p>
<p>RxJava2 vs RxJava1</p>
<ul>
<li><a href="http://www.jianshu.com/p/850af4f09b61" target="_blank">http://www.jianshu.com/p/850af4f09b61</a></li>
<li><a href="http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/0907/6604.html" target="_blank">http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/0907/6604.html</a></li>
</ul>
<p>========================================================================</p>
<p>1 ReactiveX&#x5165;&#x95E8;</p>
<p>&#x8FD9;&#x6BB5;&#x6587;&#x5B57;&#x9760;&#x81EA;&#xFF1A;<a href="https://github.com/jiang111/RxDocs/blob/master/Intro.md" target="_blank">https://github.com/jiang111/RxDocs/blob/master/Intro.md</a></p>
<h1 id="reactivex">ReactiveX</h1>
<blockquote>
<p><a href="http://reactivex.io/intro.html" target="_blank">http://reactivex.io/intro.html</a></p>
</blockquote>
<h2 id="rx&#x4ECB;&#x7ECD;">Rx&#x4ECB;&#x7ECD;</h2>
<h3 id="reactivex&#x7684;&#x5386;&#x53F2;">ReactiveX&#x7684;&#x5386;&#x53F2;</h3>
<p>ReactiveX&#x662F;Reactive Extensions&#x7684;&#x7F29;&#x5199;&#xFF0C;&#x4E00;&#x822C;&#x7B80;&#x5199;&#x4E3A;Rx&#xFF0C;&#x6700;&#x521D;&#x662F;LINQ&#x7684;&#x4E00;&#x4E2A;&#x6269;&#x5C55;&#xFF0C;&#x7531;&#x5FAE;&#x8F6F;&#x7684;&#x67B6;&#x6784;&#x5E08;Erik Meijer&#x9886;&#x5BFC;&#x7684;&#x56E2;&#x961F;&#x5F00;&#x53D1;&#xFF0C;&#x5728;2012&#x5E74;11&#x6708;&#x5F00;&#x6E90;&#xFF0C;Rx&#x662F;&#x4E00;&#x4E2A;&#x7F16;&#x7A0B;&#x6A21;&#x578B;&#xFF0C;&#x76EE;&#x6807;&#x662F;&#x63D0;&#x4F9B;&#x4E00;&#x81F4;&#x7684;&#x7F16;&#x7A0B;&#x63A5;&#x53E3;&#xFF0C;&#x5E2E;&#x52A9;&#x5F00;&#x53D1;&#x8005;&#x66F4;&#x65B9;&#x4FBF;&#x7684;&#x5904;&#x7406;&#x5F02;&#x6B65;&#x6570;&#x636E;&#x6D41;&#xFF0C;Rx&#x5E93;&#x652F;&#x6301;.NET&#x3001;JavaScript&#x548C;C++&#xFF0C;Rx&#x8FD1;&#x51E0;&#x5E74;&#x8D8A;&#x6765;&#x8D8A;&#x6D41;&#x884C;&#x4E86;&#xFF0C;&#x73B0;&#x5728;&#x5DF2;&#x7ECF;&#x652F;&#x6301;&#x51E0;&#x4E4E;&#x5168;&#x90E8;&#x7684;&#x6D41;&#x884C;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#x4E86;&#xFF0C;Rx&#x7684;&#x5927;&#x90E8;&#x5206;&#x8BED;&#x8A00;&#x5E93;&#x7531;ReactiveX&#x8FD9;&#x4E2A;&#x7EC4;&#x7EC7;&#x8D1F;&#x8D23;&#x7EF4;&#x62A4;&#xFF0C;&#x6BD4;&#x8F83;&#x6D41;&#x884C;&#x7684;&#x6709;RxJava/RxJS/Rx.NET&#xFF0C;&#x793E;&#x533A;&#x7F51;&#x7AD9;&#x662F; <a href="http://reactivex.io/" target="_blank">reactivex.io</a>&#x3002;</p>
<h3 id="&#x4EC0;&#x4E48;&#x662F;reactivex">&#x4EC0;&#x4E48;&#x662F;ReactiveX</h3>
<p>&#x5FAE;&#x8F6F;&#x7ED9;&#x7684;&#x5B9A;&#x4E49;&#x662F;&#xFF0C;Rx&#x662F;&#x4E00;&#x4E2A;&#x51FD;&#x6570;&#x5E93;&#xFF0C;&#x8BA9;&#x5F00;&#x53D1;&#x8005;&#x53EF;&#x4EE5;&#x5229;&#x7528;&#x53EF;&#x89C2;&#x5BDF;&#x5E8F;&#x5217;&#x548C;LINQ&#x98CE;&#x683C;&#x67E5;&#x8BE2;&#x64CD;&#x4F5C;&#x7B26;&#x6765;&#x7F16;&#x5199;&#x5F02;&#x6B65;&#x548C;&#x57FA;&#x4E8E;&#x4E8B;&#x4EF6;&#x7684;&#x7A0B;&#x5E8F;&#xFF0C;&#x4F7F;&#x7528;Rx&#xFF0C;&#x5F00;&#x53D1;&#x8005;&#x53EF;&#x4EE5;&#x7528;Observables&#x8868;&#x793A;&#x5F02;&#x6B65;&#x6570;&#x636E;&#x6D41;&#xFF0C;&#x7528;LINQ&#x64CD;&#x4F5C;&#x7B26;&#x67E5;&#x8BE2;&#x5F02;&#x6B65;&#x6570;&#x636E;&#x6D41;&#xFF0C; &#x7528;Schedulers&#x53C2;&#x6570;&#x5316;&#x5F02;&#x6B65;&#x6570;&#x636E;&#x6D41;&#x7684;&#x5E76;&#x53D1;&#x5904;&#x7406;&#xFF0C;Rx&#x53EF;&#x4EE5;&#x8FD9;&#x6837;&#x5B9A;&#x4E49;&#xFF1A;Rx = Observables + LINQ + Schedulers&#x3002;</p>
<p>ReactiveX.io&#x7ED9;&#x7684;&#x5B9A;&#x4E49;&#x662F;&#xFF0C;Rx&#x662F;&#x4E00;&#x4E2A;&#x4F7F;&#x7528;&#x53EF;&#x89C2;&#x5BDF;&#x6570;&#x636E;&#x6D41;&#x8FDB;&#x884C;&#x5F02;&#x6B65;&#x7F16;&#x7A0B;&#x7684;&#x7F16;&#x7A0B;&#x63A5;&#x53E3;&#xFF0C;ReactiveX&#x7ED3;&#x5408;&#x4E86;&#x89C2;&#x5BDF;&#x8005;&#x6A21;&#x5F0F;&#x3001;&#x8FED;&#x4EE3;&#x5668;&#x6A21;&#x5F0F;&#x548C;&#x51FD;&#x6570;&#x5F0F;&#x7F16;&#x7A0B;&#x7684;&#x7CBE;&#x534E;&#x3002;</p>
<h3 id="reactivex&#x7684;&#x5E94;&#x7528;">ReactiveX&#x7684;&#x5E94;&#x7528;</h3>
<p>&#x5F88;&#x591A;&#x516C;&#x53F8;&#x90FD;&#x5728;&#x4F7F;&#x7528;ReactiveX&#xFF0C;&#x4F8B;&#x5982;Microsoft&#x3001;Netflix&#x3001;Github&#x3001;Trello&#x3001;SoundCloud&#x3002;</p>
<h3 id="reactivex&#x5BA3;&#x8A00;">ReactiveX&#x5BA3;&#x8A00;</h3>
<p>ReactiveX&#x4E0D;&#x4EC5;&#x4EC5;&#x662F;&#x4E00;&#x4E2A;&#x7F16;&#x7A0B;&#x63A5;&#x53E3;&#xFF0C;&#x5B83;&#x662F;&#x4E00;&#x79CD;&#x7F16;&#x7A0B;&#x601D;&#x60F3;&#x7684;&#x7A81;&#x7834;&#xFF0C;&#x5B83;&#x5F71;&#x54CD;&#x4E86;&#x8BB8;&#x591A;&#x5176;&#x5B83;&#x7684;&#x7A0B;&#x5E8F;&#x5E93;&#x548C;&#x6846;&#x67B6;&#x4EE5;&#x53CA;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#x3002;</p>
<h2 id="rx&#x6A21;&#x5F0F;">Rx&#x6A21;&#x5F0F;</h2>
<h3 id="&#x4F7F;&#x7528;&#x89C2;&#x5BDF;&#x8005;&#x6A21;&#x5F0F;">&#x4F7F;&#x7528;&#x89C2;&#x5BDF;&#x8005;&#x6A21;&#x5F0F;</h3>
<ul>
<li>&#x521B;&#x5EFA;&#xFF1A;Rx&#x53EF;&#x4EE5;&#x65B9;&#x4FBF;&#x7684;&#x521B;&#x5EFA;&#x4E8B;&#x4EF6;&#x6D41;&#x548C;&#x6570;&#x636E;&#x6D41;</li>
<li>&#x7EC4;&#x5408;&#xFF1A;Rx&#x4F7F;&#x7528;&#x67E5;&#x8BE2;&#x5F0F;&#x7684;&#x64CD;&#x4F5C;&#x7B26;&#x7EC4;&#x5408;&#x548C;&#x53D8;&#x6362;&#x6570;&#x636E;&#x6D41;</li>
<li>&#x76D1;&#x542C;&#xFF1A;Rx&#x53EF;&#x4EE5;&#x8BA2;&#x9605;&#x4EFB;&#x4F55;&#x53EF;&#x89C2;&#x5BDF;&#x7684;&#x6570;&#x636E;&#x6D41;&#x5E76;&#x6267;&#x884C;&#x64CD;&#x4F5C;</li>
</ul>
<h3 id="&#x7B80;&#x5316;&#x4EE3;&#x7801;">&#x7B80;&#x5316;&#x4EE3;&#x7801;</h3>
<ul>
<li>&#x51FD;&#x6570;&#x5F0F;&#x98CE;&#x683C;&#xFF1A;&#x5BF9;&#x53EF;&#x89C2;&#x5BDF;&#x6570;&#x636E;&#x6D41;&#x4F7F;&#x7528;&#x65E0;&#x526F;&#x4F5C;&#x7528;&#x7684;&#x8F93;&#x5165;&#x8F93;&#x51FA;&#x51FD;&#x6570;&#xFF0C;&#x907F;&#x514D;&#x4E86;&#x7A0B;&#x5E8F;&#x91CC;&#x9519;&#x7EFC;&#x590D;&#x6742;&#x7684;&#x72B6;&#x6001;</li>
<li>&#x7B80;&#x5316;&#x4EE3;&#x7801;&#xFF1A;Rx&#x7684;&#x64CD;&#x4F5C;&#x7B26;&#x901A;&#x901A;&#x5E38;&#x53EF;&#x4EE5;&#x5C06;&#x590D;&#x6742;&#x7684;&#x96BE;&#x9898;&#x7B80;&#x5316;&#x4E3A;&#x5F88;&#x5C11;&#x7684;&#x51E0;&#x884C;&#x4EE3;&#x7801;</li>
<li>&#x5F02;&#x6B65;&#x9519;&#x8BEF;&#x5904;&#x7406;&#xFF1A;&#x4F20;&#x7EDF;&#x7684;try/catch&#x6CA1;&#x529E;&#x6CD5;&#x5904;&#x7406;&#x5F02;&#x6B65;&#x8BA1;&#x7B97;&#xFF0C;Rx&#x63D0;&#x4F9B;&#x4E86;&#x5408;&#x9002;&#x7684;&#x9519;&#x8BEF;&#x5904;&#x7406;&#x673A;&#x5236;</li>
<li>&#x8F7B;&#x677E;&#x4F7F;&#x7528;&#x5E76;&#x53D1;&#xFF1A;Rx&#x7684;Observables&#x548C;Schedulers&#x8BA9;&#x5F00;&#x53D1;&#x8005;&#x53EF;&#x4EE5;&#x6446;&#x8131;&#x5E95;&#x5C42;&#x7684;&#x7EBF;&#x7A0B;&#x540C;&#x6B65;&#x548C;&#x5404;&#x79CD;&#x5E76;&#x53D1;&#x95EE;&#x9898;</li>
</ul>
<h3 id="&#x4F7F;&#x7528;observable&#x7684;&#x4F18;&#x52BF;">&#x4F7F;&#x7528;Observable&#x7684;&#x4F18;&#x52BF;</h3>
<p>Rx&#x6269;&#x5C55;&#x4E86;&#x89C2;&#x5BDF;&#x8005;&#x6A21;&#x5F0F;&#x7528;&#x4E8E;&#x652F;&#x6301;&#x6570;&#x636E;&#x548C;&#x4E8B;&#x4EF6;&#x5E8F;&#x5217;&#xFF0C;&#x6DFB;&#x52A0;&#x4E86;&#x4E00;&#x4E9B;&#x64CD;&#x4F5C;&#x7B26;&#xFF0C;&#x5B83;&#x8BA9;&#x4F60;&#x53EF;&#x4EE5;&#x58F0;&#x660E;&#x5F0F;&#x7684;&#x7EC4;&#x5408;&#x8FD9;&#x4E9B;&#x5E8F;&#x5217;&#xFF0C;&#x800C;&#x65E0;&#x9700;&#x5173;&#x6CE8;&#x5E95;&#x5C42;&#x7684;&#x5B9E;&#x73B0;&#xFF1A;&#x5982;&#x7EBF;&#x7A0B;&#x3001;&#x540C;&#x6B65;&#x3001;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x3001;&#x5E76;&#x53D1;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x548C;&#x975E;&#x963B;&#x585E;IO&#x3002;</p>
<p>Observable&#x901A;&#x8FC7;&#x4F7F;&#x7528;&#x6700;&#x4F73;&#x7684;&#x65B9;&#x5F0F;&#x8BBF;&#x95EE;&#x5F02;&#x6B65;&#x6570;&#x636E;&#x5E8F;&#x5217;&#x586B;&#x8865;&#x4E86;&#x8FD9;&#x4E2A;&#x95F4;&#x9699;</p>
<table>
<thead>
<tr>
<th></th>
<th>&#x5355;&#x4E2A;&#x6570;&#x636E;</th>
<th>&#x591A;&#x4E2A;&#x6570;&#x636E;</th>
</tr>
</thead>
<tbody>
<tr>
<td>&#x540C;&#x6B65;</td>
<td><code>T getData()</code></td>
<td><code>Iterable&lt;T&gt; getData()</code></td>
</tr>
<tr>
<td>&#x5F02;&#x6B65;</td>
<td><code>Future&lt;T&gt; getData()</code></td>
<td><code>Observable&lt;T&gt; getData()</code></td>
</tr>
</tbody>
</table>
<p>Rx&#x7684;Observable&#x6A21;&#x578B;&#x8BA9;&#x4F60;&#x53EF;&#x4EE5;&#x50CF;&#x4F7F;&#x7528;&#x96C6;&#x5408;&#x6570;&#x636E;&#x4E00;&#x6837;&#x64CD;&#x4F5C;&#x5F02;&#x6B65;&#x4E8B;&#x4EF6;&#x6D41;&#xFF0C;&#x5BF9;&#x5F02;&#x6B65;&#x4E8B;&#x4EF6;&#x6D41;&#x4F7F;&#x7528;&#x5404;&#x79CD;&#x7B80;&#x5355;&#x3001;&#x53EF;&#x7EC4;&#x5408;&#x7684;&#x64CD;&#x4F5C;&#x3002;</p>
<h4 id="observable&#x53EF;&#x7EC4;&#x5408;">Observable&#x53EF;&#x7EC4;&#x5408;</h4>
<p>&#x5BF9;&#x4E8E;&#x5355;&#x5C42;&#x7684;&#x5F02;&#x6B65;&#x64CD;&#x4F5C;&#x6765;&#x8BF4;&#xFF0C;Java&#x4E2D;Future&#x5BF9;&#x8C61;&#x7684;&#x5904;&#x7406;&#x65B9;&#x5F0F;&#x662F;&#x975E;&#x5E38;&#x7B80;&#x5355;&#x6709;&#x6548;&#x7684;&#xFF0C;&#x4F46;&#x662F;&#x4E00;&#x65E6;&#x6D89;&#x53CA;&#x5230;&#x5D4C;&#x5957;&#xFF0C;&#x5B83;&#x4EEC;&#x5C31;&#x5F00;&#x59CB;&#x53D8;&#x5F97;&#x5F02;&#x5E38;&#x7E41;&#x7410;&#x548C;&#x590D;&#x6742;&#x3002;&#x4F7F;&#x7528;Future&#x5F88;&#x96BE;&#x5F88;&#x597D;&#x7684;&#x7EC4;&#x5408;&#x5E26;&#x6761;&#x4EF6;&#x7684;&#x5F02;&#x6B65;&#x6267;&#x884C;&#x6D41;&#x7A0B;&#xFF08;&#x8003;&#x8651;&#x5230;&#x8FD0;&#x884C;&#x65F6;&#x5404;&#x79CD;&#x6F5C;&#x5728;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x751A;&#x81F3;&#x53EF;&#x4EE5;&#x8BF4;&#x662F;&#x4E0D;&#x53EF;&#x80FD;&#x7684;&#xFF09;&#xFF0C;&#x5F53;&#x7136;&#xFF0C;&#x8981;&#x60F3;&#x5B9E;&#x73B0;&#x8FD8;&#x662F;&#x53EF;&#x4EE5;&#x505A;&#x5230;&#x7684;&#xFF0C;&#x4F46;&#x662F;&#x975E;&#x5E38;&#x56F0;&#x96BE;&#xFF0C;&#x6216;&#x8BB8;&#x4F60;&#x53EF;&#x4EE5;&#x7528;<code>Future.get()</code>&#xFF0C;&#x4F46;&#x8FD9;&#x6837;&#x505A;&#xFF0C;&#x5F02;&#x6B65;&#x6267;&#x884C;&#x7684;&#x4F18;&#x52BF;&#x5C31;&#x5B8C;&#x5168;&#x6CA1;&#x6709;&#x4E86;&#x3002;&#x4ECE;&#x53E6;&#x4E00;&#x65B9;&#x9762;&#x8BF4;&#xFF0C;Rx&#x7684;Observable&#x4E00;&#x5F00;&#x59CB;&#x5C31;&#x662F;&#x4E3A;&#x7EC4;&#x5408;&#x5F02;&#x6B65;&#x6570;&#x636E;&#x6D41;&#x51C6;&#x5907;&#x7684;&#x3002;</p>
<h4 id="observable&#x66F4;&#x7075;&#x6D3B;">Observable&#x66F4;&#x7075;&#x6D3B;</h4>
<p>Rx&#x7684;Observable&#x4E0D;&#x4EC5;&#x652F;&#x6301;&#x5904;&#x7406;&#x5355;&#x72EC;&#x7684;&#x6807;&#x91CF;&#x503C;&#xFF08;&#x5C31;&#x50CF;Future&#x53EF;&#x4EE5;&#x505A;&#x7684;&#xFF09;&#xFF0C;&#x4E5F;&#x652F;&#x6301;&#x6570;&#x636E;&#x5E8F;&#x5217;&#xFF0C;&#x751A;&#x81F3;&#x662F;&#x65E0;&#x7A77;&#x7684;&#x6570;&#x636E;&#x6D41;&#x3002;<code>Observable</code>&#x662F;&#x4E00;&#x4E2A;&#x62BD;&#x8C61;&#x6982;&#x5FF5;&#xFF0C;&#x9002;&#x7528;&#x4E8E;&#x4EFB;&#x4F55;&#x573A;&#x666F;&#x3002;Observable&#x62E5;&#x6709;&#x5B83;&#x7684;&#x8FD1;&#x4EB2;Iterable&#x7684;&#x5168;&#x90E8;&#x4F18;&#x96C5;&#x4E0E;&#x7075;&#x6D3B;&#x3002;</p>
<p>Observable&#x662F;&#x5F02;&#x6B65;&#x7684;&#x53CC;&#x5411;push&#xFF0C;Iterable&#x662F;&#x540C;&#x6B65;&#x7684;&#x5355;&#x5411;pull&#xFF0C;&#x5BF9;&#x6BD4;&#xFF1A;</p>
<table>
<thead>
<tr>
<th>&#x4E8B;&#x4EF6;</th>
<th>Iterable(pull)</th>
<th>Observable(push)</th>
</tr>
</thead>
<tbody>
<tr>
<td>&#x83B7;&#x53D6;&#x6570;&#x636E;</td>
<td><code>T next()</code></td>
<td><code>onNext(T)</code></td>
</tr>
<tr>
<td>&#x5F02;&#x5E38;&#x5904;&#x7406;</td>
<td>throws <code>Exception</code></td>
<td><code>onError(Exception)</code></td>
</tr>
<tr>
<td>&#x4EFB;&#x52A1;&#x5B8C;&#x6210;</td>
<td><code>!hasNext()</code></td>
<td><code>onCompleted()</code></td>
</tr>
</tbody>
</table>
<h4 id="observable&#x65E0;&#x504F;&#x89C1;">Observable&#x65E0;&#x504F;&#x89C1;</h4>
<p>Rx&#x5BF9;&#x4E8E;&#x5BF9;&#x4E8E;&#x5E76;&#x53D1;&#x6027;&#x6216;&#x5F02;&#x6B65;&#x6027;&#x6CA1;&#x6709;&#x4EFB;&#x4F55;&#x7279;&#x6B8A;&#x7684;&#x504F;&#x597D;&#xFF0C;Observable&#x53EF;&#x4EE5;&#x7528;&#x4EFB;&#x4F55;&#x65B9;&#x5F0F;&#x5B9E;&#x73B0;&#xFF0C;&#x7EBF;&#x7A0B;&#x6C60;&#x3001;&#x4E8B;&#x4EF6;&#x5FAA;&#x73AF;&#x3001;&#x975E;&#x963B;&#x585E;IO&#x3001;Actor&#x6A21;&#x5F0F;&#xFF0C;&#x4EFB;&#x4F55;&#x6EE1;&#x8DB3;&#x4F60;&#x7684;&#x9700;&#x6C42;&#x7684;&#xFF0C;&#x4F60;&#x64C5;&#x957F;&#x6216;&#x504F;&#x597D;&#x7684;&#x65B9;&#x5F0F;&#x90FD;&#x53EF;&#x4EE5;&#x3002;&#x65E0;&#x8BBA;&#x4F60;&#x9009;&#x62E9;&#x600E;&#x6837;&#x5B9E;&#x73B0;&#x5B83;&#xFF0C;&#x65E0;&#x8BBA;&#x5E95;&#x5C42;&#x5B9E;&#x73B0;&#x662F;&#x963B;&#x585E;&#x7684;&#x8FD8;&#x662F;&#x975E;&#x963B;&#x585E;&#x7684;&#xFF0C;&#x5BA2;&#x6237;&#x7AEF;&#x4EE3;&#x7801;&#x5C06;&#x6240;&#x6709;&#x4E0E;Observable&#x7684;&#x4EA4;&#x4E92;&#x90FD;&#x5F53;&#x505A;&#x662F;&#x5F02;&#x6B65;&#x7684;&#x3002;</p>
<p><strong>Observable&#x662F;&#x5982;&#x4F55;&#x5B9E;&#x73B0;&#x7684;&#xFF1F;</strong></p>
<pre><code class="lang-java"><span class="hljs-function"><span class="hljs-keyword">public</span> Observable&lt;data&gt; <span class="hljs-title">getData</span><span class="hljs-params">()</span></span>;
</code></pre>
<ul>
<li>&#x5B83;&#x80FD;&#x4E0E;&#x8C03;&#x7528;&#x8005;&#x5728;&#x540C;&#x4E00;&#x7EBF;&#x7A0B;&#x540C;&#x6B65;&#x6267;&#x884C;&#x5417;&#xFF1F;</li>
<li>&#x5B83;&#x80FD;&#x5F02;&#x6B65;&#x5730;&#x5728;&#x5355;&#x72EC;&#x7684;&#x7EBF;&#x7A0B;&#x6267;&#x884C;&#x5417;&#xFF1F;</li>
<li>&#x5B83;&#x4F1A;&#x5C06;&#x5DE5;&#x4F5C;&#x5206;&#x53D1;&#x5230;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#xFF0C;&#x8FD4;&#x56DE;&#x6570;&#x636E;&#x7684;&#x987A;&#x5E8F;&#x662F;&#x4EFB;&#x610F;&#x7684;&#x5417;&#xFF1F;</li>
<li>&#x5B83;&#x4F7F;&#x7528;Actor&#x6A21;&#x5F0F;&#x800C;&#x4E0D;&#x662F;&#x7EBF;&#x7A0B;&#x6C60;&#x5417;&#xFF1F;</li>
<li>&#x5B83;&#x4F7F;&#x7528;NIO&#x548C;&#x4E8B;&#x4EF6;&#x5FAA;&#x73AF;&#x6267;&#x884C;&#x5F02;&#x6B65;&#x7F51;&#x7EDC;&#x8BBF;&#x95EE;&#x5417;&#xFF1F;</li>
<li>&#x5B83;&#x4F7F;&#x7528;&#x4E8B;&#x4EF6;&#x5FAA;&#x73AF;&#x5C06;&#x5DE5;&#x4F5C;&#x7EBF;&#x7A0B;&#x4ECE;&#x56DE;&#x8C03;&#x7EBF;&#x7A0B;&#x5206;&#x79BB;&#x51FA;&#x6765;&#x5417;&#xFF1F;</li>
</ul>
<p>&#x4ECE;Observer&#x7684;&#x89C6;&#x89D2;&#x770B;&#xFF0C;&#x8FD9;&#x4E9B;&#x90FD;&#x65E0;&#x6240;&#x8C13;&#xFF0C;&#x91CD;&#x8981;&#x7684;&#x662F;&#xFF1A;&#x4F7F;&#x7528;Rx&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x6539;&#x53D8;&#x4F60;&#x7684;&#x89C2;&#x5FF5;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x5728;&#x5B8C;&#x5168;&#x4E0D;&#x5F71;&#x54CD;Observable&#x7A0B;&#x5E8F;&#x5E93;&#x4F7F;&#x7528;&#x8005;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x5F7B;&#x5E95;&#x7684;&#x6539;&#x53D8;Observable&#x7684;&#x5E95;&#x5C42;&#x5B9E;&#x73B0;&#x3002;</p>
<h4 id="&#x4F7F;&#x7528;&#x56DE;&#x8C03;&#x5B58;&#x5728;&#x5F88;&#x591A;&#x95EE;&#x9898;">&#x4F7F;&#x7528;&#x56DE;&#x8C03;&#x5B58;&#x5728;&#x5F88;&#x591A;&#x95EE;&#x9898;</h4>
<p>&#x56DE;&#x8C03;&#x5728;&#x4E0D;&#x963B;&#x585E;&#x4EFB;&#x4F55;&#x4E8B;&#x60C5;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x89E3;&#x51B3;&#x4E86;<code>Future.get()</code>&#x8FC7;&#x65E9;&#x963B;&#x585E;&#x7684;&#x95EE;&#x9898;&#x3002;&#x7531;&#x4E8E;&#x54CD;&#x5E94;&#x7ED3;&#x679C;&#x4E00;&#x65E6;&#x5C31;&#x7EEA;Callback&#x5C31;&#x4F1A;&#x88AB;&#x8C03;&#x7528;&#xFF0C;&#x5B83;&#x4EEC;&#x5929;&#x751F;&#x5C31;&#x662F;&#x9AD8;&#x6548;&#x7387;&#x7684;&#x3002;&#x4E0D;&#x8FC7;&#xFF0C;&#x5C31;&#x50CF;&#x4F7F;&#x7528;Future&#x4E00;&#x6837;&#xFF0C;&#x5BF9;&#x4E8E;&#x5355;&#x5C42;&#x7684;&#x5F02;&#x6B65;&#x6267;&#x884C;&#x6765;&#x8BF4;&#xFF0C;&#x56DE;&#x8C03;&#x5F88;&#x5BB9;&#x6613;&#x4F7F;&#x7528;&#xFF0C;&#x5BF9;&#x4E8E;&#x5D4C;&#x5957;&#x7684;&#x5F02;&#x6B65;&#x7EC4;&#x5408;&#xFF0C;&#x5B83;&#x4EEC;&#x663E;&#x5F97;&#x975E;&#x5E38;&#x7B28;&#x62D9;&#x3002;</p>
<h4 id="rx&#x662F;&#x4E00;&#x4E2A;&#x591A;&#x8BED;&#x8A00;&#x7684;&#x5B9E;&#x73B0;">Rx&#x662F;&#x4E00;&#x4E2A;&#x591A;&#x8BED;&#x8A00;&#x7684;&#x5B9E;&#x73B0;</h4>
<p>Rx&#x5728;&#x5927;&#x91CF;&#x7684;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#x4E2D;&#x90FD;&#x6709;&#x5B9E;&#x73B0;&#xFF0C;&#x5E76;&#x5C0A;&#x91CD;&#x5B9E;&#x73B0;&#x8BED;&#x8A00;&#x7684;&#x98CE;&#x683C;&#xFF0C;&#x800C;&#x4E14;&#x66F4;&#x591A;&#x7684;&#x5B9E;&#x73B0;&#x6B63;&#x5728;&#x98DE;&#x901F;&#x589E;&#x52A0;&#x3002;</p>
<h4 id="&#x54CD;&#x5E94;&#x5F0F;&#x7F16;&#x7A0B;">&#x54CD;&#x5E94;&#x5F0F;&#x7F16;&#x7A0B;</h4>
<p>Rx&#x63D0;&#x4F9B;&#x4E86;&#x4E00;&#x7CFB;&#x5217;&#x7684;&#x64CD;&#x4F5C;&#x7B26;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x5B83;&#x4EEC;&#x6765;&#x8FC7;&#x6EE4;(filter)&#x3001;&#x9009;&#x62E9;(select)&#x3001;&#x53D8;&#x6362;(transform)&#x3001;&#x7ED3;&#x5408;(combine)&#x548C;&#x7EC4;&#x5408;(compose)&#x591A;&#x4E2A;Observable&#xFF0C;&#x8FD9;&#x4E9B;&#x64CD;&#x4F5C;&#x7B26;&#x8BA9;&#x6267;&#x884C;&#x548C;&#x590D;&#x5408;&#x53D8;&#x5F97;&#x975E;&#x5E38;&#x9AD8;&#x6548;&#x3002;</p>
<p>&#x4F60;&#x53EF;&#x4EE5;&#x628A;Observable&#x5F53;&#x505A;Iterable&#x7684;&#x63A8;&#x9001;&#x65B9;&#x5F0F;&#x7684;&#x7B49;&#x4EF7;&#x7269;&#xFF0C;&#x4F7F;&#x7528;Iterable&#xFF0C;&#x6D88;&#x8D39;&#x8005;&#x4ECE;&#x751F;&#x4EA7;&#x8005;&#x90A3;&#x62C9;&#x53D6;&#x6570;&#x636E;&#xFF0C;&#x7EBF;&#x7A0B;&#x963B;&#x585E;&#x76F4;&#x81F3;&#x6570;&#x636E;&#x51C6;&#x5907;&#x597D;&#x3002;&#x4F7F;&#x7528;Observable&#xFF0C;&#x5728;&#x6570;&#x636E;&#x51C6;&#x5907;&#x597D;&#x65F6;&#xFF0C;&#x751F;&#x4EA7;&#x8005;&#x5C06;&#x6570;&#x636E;&#x63A8;&#x9001;&#x7ED9;&#x6D88;&#x8D39;&#x8005;&#x3002;&#x6570;&#x636E;&#x53EF;&#x4EE5;&#x540C;&#x6B65;&#x6216;&#x5F02;&#x6B65;&#x7684;&#x5230;&#x8FBE;&#xFF0C;&#x8FD9;&#x79CD;&#x65B9;&#x5F0F;&#x66F4;&#x7075;&#x6D3B;&#x3002;</p>
<p>&#x4E0B;&#x9762;&#x7684;&#x4F8B;&#x5B50;&#x5C55;&#x793A;&#x4E86;&#x76F8;&#x4F3C;&#x7684;&#x9AD8;&#x9636;&#x51FD;&#x6570;&#x5728;Iterable&#x548C;Observable&#x4E0A;&#x7684;&#x5E94;&#x7528;</p>
<pre><code class="lang-java"><span class="hljs-comment">// Iterable</span>
getDataFromLocalMemory()
  .skip(<span class="hljs-number">10</span>)
  .take(<span class="hljs-number">5</span>)
  .map({ s -&gt; <span class="hljs-keyword">return</span> s + <span class="hljs-string">&quot; transformed&quot;</span> })
  .forEach({ println <span class="hljs-string">&quot;next =&gt; &quot;</span> + it })

<span class="hljs-comment">// Observable</span>
getDataFromNetwork()
  .skip(<span class="hljs-number">10</span>)
  .take(<span class="hljs-number">5</span>)
  .map({ s -&gt; <span class="hljs-keyword">return</span> s + <span class="hljs-string">&quot; transformed&quot;</span> })
  .subscribe({ println <span class="hljs-string">&quot;onNext =&gt; &quot;</span> + it })
</code></pre>
<p>Observable&#x7C7B;&#x578B;&#x7ED9;GOF&#x7684;&#x89C2;&#x5BDF;&#x8005;&#x6A21;&#x5F0F;&#x6DFB;&#x52A0;&#x4E86;&#x4E24;&#x79CD;&#x7F3A;&#x5C11;&#x7684;&#x8BED;&#x4E49;&#xFF0C;&#x8FD9;&#x6837;&#x5C31;&#x548C;Iterable&#x7C7B;&#x578B;&#x4E2D;&#x53EF;&#x7528;&#x7684;&#x64CD;&#x4F5C;&#x4E00;&#x81F4;&#x4E86;&#xFF1A;</p>
<ol>
<li>&#x751F;&#x4EA7;&#x8005;&#x53EF;&#x4EE5;&#x53D1;&#x4FE1;&#x53F7;&#x7ED9;&#x6D88;&#x8D39;&#x8005;&#xFF0C;&#x901A;&#x77E5;&#x5B83;&#x6CA1;&#x6709;&#x66F4;&#x591A;&#x6570;&#x636E;&#x53EF;&#x7528;&#x4E86;&#xFF08;&#x5BF9;&#x4E8E;Iterable&#xFF0C;&#x4E00;&#x4E2A;for&#x5FAA;&#x73AF;&#x6B63;&#x5E38;&#x5B8C;&#x6210;&#x8868;&#x793A;&#x6CA1;&#x6709;&#x6570;&#x636E;&#x4E86;&#xFF1B;&#x5BF9;&#x4E8E;Observable&#xFF0C;&#x5C31;&#x662F;&#x8C03;&#x7528;&#x89C2;&#x5BDF;&#x8005;&#x7684;<code>onCompleted</code>&#x65B9;&#x6CD5;&#xFF09;</li>
<li>&#x751F;&#x4EA7;&#x8005;&#x53EF;&#x4EE5;&#x53D1;&#x4FE1;&#x53F7;&#x7ED9;&#x6D88;&#x8D39;&#x8005;&#xFF0C;&#x901A;&#x77E5;&#x5B83;&#x9047;&#x5230;&#x4E86;&#x4E00;&#x4E2A;&#x9519;&#x8BEF;&#xFF08;&#x5BF9;&#x4E8E;Iterable&#xFF0C;&#x8FED;&#x4EE3;&#x8FC7;&#x7A0B;&#x4E2D;&#x53D1;&#x751F;&#x9519;&#x8BEF;&#x4F1A;&#x629B;&#x51FA;&#x5F02;&#x5E38;&#xFF1B;&#x5BF9;&#x4E8E;Observable&#xFF0C;&#x5C31;&#x662F;&#x8C03;&#x7528;&#x89C2;&#x5BDF;&#x8005;(Observer)&#x7684;<code>onError</code>&#x65B9;&#x6CD5;&#xFF09;</li>
</ol>
<p>&#x6709;&#x4E86;&#x8FD9;&#x4E24;&#x79CD;&#x529F;&#x80FD;&#xFF0C;Rx&#x5C31;&#x80FD;&#x4F7F;Observable&#x4E0E;Iterable&#x4FDD;&#x6301;&#x4E00;&#x81F4;&#x4E86;&#xFF0C;&#x552F;&#x4E00;&#x7684;&#x4E0D;&#x540C;&#x662F;&#x6570;&#x636E;&#x6D41;&#x7684;&#x65B9;&#x5411;&#x3002;&#x4EFB;&#x4F55;&#x5BF9;Iterable&#x7684;&#x64CD;&#x4F5C;&#xFF0C;&#x4F60;&#x90FD;&#x53EF;&#x4EE5;&#x5BF9;Observable&#x4F7F;&#x7528;&#x3002;</p>
<h2 id="&#x540D;&#x8BCD;&#x5B9A;&#x4E49;">&#x540D;&#x8BCD;&#x5B9A;&#x4E49;</h2>
<p>&#x8FD9;&#x91CC;&#x7ED9;&#x51FA;&#x4E00;&#x4E9B;&#x540D;&#x8BCD;&#x7684;&#x7FFB;&#x8BD1;</p>
<ul>
<li>Reactive &#x76F4;&#x8BD1;&#x4E3A;&#x53CD;&#x5E94;&#x6027;&#x7684;&#xFF0C;&#x6709;&#x6D3B;&#x6027;&#x7684;&#xFF0C;&#x6839;&#x636E;&#x4E0A;&#x4E0B;&#x6587;&#x4E00;&#x822C;&#x7FFB;&#x8BD1;&#x4E3A;&#x53CD;&#x5E94;&#x5F0F;&#x3001;&#x54CD;&#x5E94;&#x5F0F;</li>
<li>Iterable &#x53EF;&#x8FED;&#x4EE3;&#x5BF9;&#x8C61;&#xFF0C;&#x652F;&#x6301;&#x4EE5;&#x8FED;&#x4EE3;&#x5668;&#x7684;&#x5F62;&#x5F0F;&#x904D;&#x5386;&#xFF0C;&#x8BB8;&#x591A;&#x8BED;&#x8A00;&#x4E2D;&#x90FD;&#x5B58;&#x5728;&#x8FD9;&#x4E2A;&#x6982;&#x5FF5;</li>
<li>Observable &#x53EF;&#x89C2;&#x5BDF;&#x5BF9;&#x8C61;&#xFF0C;&#x5728;Rx&#x4E2D;&#x5B9A;&#x4E49;&#x4E3A;&#x66F4;&#x5F3A;&#x5927;&#x7684;Iterable&#xFF0C;&#x5728;&#x89C2;&#x5BDF;&#x8005;&#x6A21;&#x5F0F;&#x4E2D;&#x662F;&#x88AB;&#x89C2;&#x5BDF;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;&#x4E00;&#x65E6;&#x6570;&#x636E;&#x4EA7;&#x751F;&#x6216;&#x53D1;&#x751F;&#x53D8;&#x5316;&#xFF0C;&#x4F1A;&#x901A;&#x8FC7;&#x67D0;&#x79CD;&#x65B9;&#x5F0F;&#x901A;&#x77E5;&#x89C2;&#x5BDF;&#x8005;&#x6216;&#x8BA2;&#x9605;&#x8005;</li>
<li>Observer &#x89C2;&#x5BDF;&#x8005;&#x5BF9;&#x8C61;&#xFF0C;&#x76D1;&#x542C;Observable&#x53D1;&#x5C04;&#x7684;&#x6570;&#x636E;&#x5E76;&#x505A;&#x51FA;&#x54CD;&#x5E94;&#xFF0C;Subscriber&#x662F;&#x5B83;&#x7684;&#x4E00;&#x4E2A;&#x7279;&#x6B8A;&#x5B9E;&#x73B0;</li>
<li>emit &#x76F4;&#x8BD1;&#x4E3A;&#x53D1;&#x5C04;&#xFF0C;&#x53D1;&#x5E03;&#xFF0C;&#x53D1;&#x51FA;&#xFF0C;&#x542B;&#x4E49;&#x662F;Observable&#x5728;&#x6570;&#x636E;&#x4EA7;&#x751F;&#x6216;&#x53D8;&#x5316;&#x65F6;&#x53D1;&#x9001;&#x901A;&#x77E5;&#x7ED9;Observer&#xFF0C;&#x8C03;&#x7528;Observer&#x5BF9;&#x5E94;&#x7684;&#x65B9;&#x6CD5;&#xFF0C;&#x6587;&#x7AE0;&#x91CC;&#x4E00;&#x5F8B;&#x8BD1;&#x4E3A;&#x53D1;&#x5C04;</li>
<li>items &#x76F4;&#x8BD1;&#x4E3A;&#x9879;&#x76EE;&#xFF0C;&#x6761;&#x76EE;&#xFF0C;&#x5728;Rx&#x91CC;&#x662F;&#x6307;Observable&#x53D1;&#x5C04;&#x7684;&#x6570;&#x636E;&#x9879;&#xFF0C;&#x6587;&#x7AE0;&#x91CC;&#x4E00;&#x5F8B;&#x8BD1;&#x4E3A;&#x6570;&#x636E;&#xFF0C;&#x6570;&#x636E;&#x9879;</li>
</ul>
<p>2 &#x6570;&#x636E;&#x6E90;</p>
<p>&#x6570;&#x636E;&#x6E90;&#x8D1F;&#x8D23;&#xFF1A;</p>
<ul>
<li>&#x62FF;&#x6570;&#x636E;</li>
<li>&#x53D1;&#x5E03;&#x6570;&#x636E;</li>
</ul>
<p>&#x6570;&#x636E;&#x6E90;&#x5305;&#x62EC;&#xFF1A;</p>
<ul>
<li><code>io.reactivex.Flowable</code>: 0..N flows, supporting Reactive-Streams and backpressure</li>
<li><code>io.reactivex.Observable</code>: 0..N flows, no backpressure</li>
<li><code>io.reactivex.Single</code>: a flow of exactly 1 item or an error --- &#x8981;&#x4E48;&#x6709;&#x4E00;&#x6761;Item&#x8D70;onNext&#xFF0C;&#x8981;&#x4E48;&#x51FA;&#x9519;&#x8D70;onError&#xFF0C;&#x4E0D;&#x4F1A;&#x8D70;onComplete</li>
<li><code>io.reactivex.Completable</code>: a flow without items but only a completion or error signal -- &#x53EA;&#x4F1A;&#x8D70;onComplete</li>
<li><code>io.reactivex.Maybe</code>: a flow with no items, exactly one item or an error -- &#x6709;&#x6570;&#x636E;&#x4E86;&#xFF0C;&#x5C31;&#x53EA;&#x8D70;onNext&#xFF0C;&#x6CA1;&#x6570;&#x636E;&#xFF0C;&#x5C31;&#x53EA;&#x8D70;onComplete&#xFF0C;&#x51FA;&#x9519;&#xFF0C;&#x5C31;&#x8D70;onError</li>
</ul>
<p>&#x5404;&#x79CD;&#x6570;&#x636E;&#x6E90;&#x7684;&#x521B;&#x5EFA;&#x548C;&#x8BA2;&#x9605;&#xFF1A;</p>
<pre><code>//1 Observable
Observable src = Observable.create(new ObservableOnSubscribe&lt;String&gt;() {
    @Override
    public void subscribe(ObservableEmitter&lt;String&gt; e) throws Exception {
        List&lt;String&gt; list = DataMgmr.server.getDataListSlow();
        for(String s: list){
            e.onNext(s);
            sleep();
        }
        e.onComplete();
    }
});
Observable&lt;String&gt; observable = Observable.just(String...);
observable = Observable.fromIterable(List&lt;String&gt;);
observable = Observable.fromArray(String[] items);
observable = Observable.fromPublisher(Publisher&lt;? extends String&gt;);

src = Observable.fromCallable(Callable&lt;? extends String&gt;);
src = Observable.fromFuture(Future&lt;? extends String&gt;);
src = Observable.fromFuture(future, Scheduler);
src = Observable.fromFuture(future, long timeout, TimeUnit);
src = Observable.fromFuture(future, long timeout, TimeUnit, Scheduler);

Observer&#x4E13;&#x5C5E;&#x8BA2;&#x9605;&#x65B9;&#x5F0F;&#xFF1A;
src.subscribe(new Observer&lt;String&gt;() {
     private Disposable disposable;

    @Override
    public void onSubscribe(Disposable d) {
        disposable = d;
    }

    @Override
    public void onNext(Integer value) {
        Log.d(&quot;JG&quot;, value.toString());
        if (value &gt; 3) {   // &gt;3 &#x65F6;&#x4E3A;&#x5F02;&#x5E38;&#x6570;&#x636E;&#xFF0C;&#x89E3;&#x9664;&#x8BA2;&#x9605;
            disposable.dispose();
        }
    }

    @Override
    public void onError(Throwable e) {

    }

    @Override
    public void onComplete() {

    }
});

&#x539F;&#x751F;&#x8BA2;&#x9605;&#x65B9;&#x5F0F;&#xFF1A;
src.subscribe(new Subscriber&lt;String&gt;() {
    @Override
    public void onSubscribe(Subscription s) {
        //&#x8FD9;&#x4E00;&#x6B65;&#x662F;&#x5FC5;&#x987B;&#xFF0C;&#x6211;&#x4EEC;&#x901A;&#x5E38;&#x53EF;&#x4EE5;&#x5728;&#x8FD9;&#x91CC;&#x505A;&#x4E00;&#x4E9B;&#x521D;&#x59CB;&#x5316;&#x64CD;&#x4F5C;&#xFF0C;&#x8C03;&#x7528;request()&#x65B9;&#x6CD5;&#x8868;&#x793A;&#x521D;&#x59CB;&#x5316;&#x5DE5;&#x4F5C;&#x5DF2;&#x7ECF;&#x5B8C;&#x6210;
        //&#x8C03;&#x7528;request()&#x65B9;&#x6CD5;&#xFF0C;&#x4F1A;&#x7ACB;&#x5373;&#x89E6;&#x53D1;onNext()&#x65B9;&#x6CD5;
        //&#x5728;onComplete()&#x65B9;&#x6CD5;&#x5B8C;&#x6210;&#xFF0C;&#x624D;&#x4F1A;&#x518D;&#x6267;&#x884C;request()&#x540E;&#x8FB9;&#x7684;&#x4EE3;&#x7801;
        s.request(Long.MAX_VALUE);
    }

    @Override
    public void onNext(String s) {
        notifyy(s);
    }

    @Override
    public void onError(Throwable t) {
        Log.e(&quot;onError&quot;, t.getMessage());
    }

    @Override
    public void onComplete() {
        //&#x7531;&#x4E8E;Reactive-Streams&#x7684;&#x517C;&#x5BB9;&#x6027;&#xFF0C;&#x65B9;&#x6CD5;onCompleted&#x88AB;&#x91CD;&#x547D;&#x540D;&#x4E3A;onComplete
        Log.e(&quot;onComplete&quot;, &quot;complete--flowable&quot;);
    }
});

&#x7B80;&#x5355;&#x70B9;&#x7684;&#x8BA2;&#x9605;&#x65B9;&#x5F0F;&#xFF1A;
src.subscribe(new Consumer&lt;String&gt;() {
   @Override
   public void accept(String s) throws Exception {
       ///&#x8FD9;&#x4E2A;&#x662F;onNext
       notifyy(s);
   }

}, new Consumer&lt;Throwable&gt;() {
   @Override
   public void accept(Throwable throwable) throws Exception {
       ///&#x8FD9;&#x4E2A;&#x662F;onError
       Functions.ERROR_CONSUMER.accept(throwable); //&#x9ED8;&#x8BA4;&#x5904;&#x7406;
   }
}, new Action() {
   @Override
   public void run() throws Exception {
       ///&#x8FD9;&#x4E2A;&#x662F;onComplete
       Functions.EMPTY_ACTION.run();  //&#x9ED8;&#x8BA4;&#x5904;&#x7406;
   }
}, new Consumer&lt;Subscription&gt;() {
   @Override
   public void accept(Subscription subscription) throws Exception {
       ///&#x8FD9;&#x4E2A;&#x662F;onSubscribe
       FlowableInternalHelper.RequestMax.INSTANCE.accept(subscription); //&#x9ED8;&#x8BA4;&#x5904;&#x7406;
   }
});

&#x7B80;&#x5199;&#xFF1A;
src.subscribe(new Consumer&lt;String&gt;() {
    @Override
    public void accept(String s) throws Exception {
        //&#x8FD9;&#x5C31;&#x662F;&#x6BCF;&#x6B21;&#x7684;onNext
    }
});

//2 Flowable
Flowable&lt;String&gt; src = Flowable.create(new FlowableOnSubscribe&lt;String&gt;() {
    @Override
    public void subscribe(FlowableEmitter&lt;String&gt; e) throws Exception {
        ...&#x540C;&#x4E0A;
    }
}, BackpressureStrategy.BUFFER);

Flowable&lt;String&gt; src = Flowable.just(T...);
src = Flowable.fromIterable(List&lt;String&gt;);
src = Flowable.fromArray(String[] items);
src = Flowable.fromPublisher(Publisher&lt;? extends String&gt;);

src = Flowable.fromCallable(Callable&lt;? extends String&gt;);
src = Flowable.fromFuture(Future&lt;? extends String&gt;);
src = Flowable.fromFuture(future, Scheduler);
src = Flowable.fromFuture(future, long timeout, TimeUnit);
src = Flowable.fromFuture(future, long timeout, TimeUnit, Scheduler);


&#x8BA2;&#x9605;&#x65B9;&#x5F0F;&#x548C;Observable&#x4E00;&#x6837;


//3 Single&#xFF1A;&#x53EA;&#x6536;&#x5230;&#x4E00;&#x6B21;item&#xFF0C;&#x6240;&#x4EE5;&#x5C31;&#x662F;&#x6210;&#x529F;&#x548C;&#x5931;&#x8D25;
Single&lt;String&gt; src = Single.create(new SingleOnSubscribe&lt;String&gt;() {
    @Override
    public void subscribe(SingleEmitter&lt;String&gt; e) throws Exception {
        e.onSuccess(&quot;item&quot;); //e.onError(Throwable)
    }
});
Single&lt;String&gt; src = Single.just(String item);
src = Single.fromCallable(Call&lt;? extends String&gt;);
src = Single.fromFuture(Future&lt;? extends String&gt;);
src = Single.fromFuture(future, Scheduler);
src = Single.fromFuture(future, long timeout, TimeUnit);
src = Single.fromFuture(future, long timeout, TimeUnit, Scheduler);
src = Single.fromObservable(Observable&lt;? extends String&gt;);
src = Single.fromPublisher(Publisher&lt;? extends String&gt;);

&#x4E5F;&#x652F;&#x6301;&#x539F;&#x59CB;&#x8BA2;&#x9605;&#x65B9;&#x5F0F;

src.subscribe(new SingleObserver&lt;String&gt;() {
    @Override
    public void onSubscribe(Disposable d) {
    }

    @Override
    public void onSuccess(String value) {

    }

    @Override
    public void onError(Throwable e) {

    }
});

src.subscribe(new BiConsumer&lt;String, Throwable&gt;() {
    @Override
    public void accept(String s, Throwable throwable) throws Exception {

    }
});

src.subscribe(new Consumer&lt;String&gt;() {
    @Override
    public void accept(String s) throws Exception {

    }
});

//4 Completable&#xFF1A;&#x53EA;&#x63A5;&#x6536;&#x5B8C;&#x6210;&#x6216;&#x8005;&#x51FA;&#x9519;&#xFF0C;&#x4E0D;&#x63A5;&#x6536;item
Completable src = Completable.create(new CompletableOnSubscribe() {
    @Override
    public void subscribe(CompletableEmitter e) throws Exception {
        e.onComplete();
    }
});
Completable src = Completable.fromAction(new Action() {
    @Override
    public void run() throws Exception {

    }
});
src = Completable.fromSingle(Single.just(&quot;&quot;));
src = Completable.fromPublisher(Flowable.just(&quot;&quot;));
src = Completable.fromRunnable(new Runnable() {});
src = Completable.fromCallable(new Callable&lt;?&gt;() {});
src = Completable.fromFuture(Future&lt;?&gt;);

src.subscribe(new CompletableObserver() {
    @Override
    public void onSubscribe(Disposable d) {

    }

    @Override
    public void onComplete() {

    }

    @Override
    public void onError(Throwable e) {

    }
});

src.subscribe(new Action() {
    @Override
    public void run() throws Exception {

    }
});

src.subscribe(new Action() {
    @Override
    public void run() throws Exception {

    }
}, new Consumer&lt;Throwable&gt;() {
    @Override
    public void accept(Throwable throwable) throws Exception {

    }
});


///5 Maybe: a flow with no items, exactly one item or an error
Maybe&lt;String&gt; src = Maybe.create(new MaybeOnSubscribe&lt;String&gt;() {
    @Override
    public void subscribe(MaybeEmitter&lt;String&gt; e) throws Exception {
        e.onSuccess(&quot;&quot;);
        e.onComplete();
    }
});
src = Maybe.fromRunnable(Runnable);
src = Maybe.fromSingle(Single.just(&quot;&quot;));
src = Maybe.fromAction(Action);
src = Maybe.fromCallable();
src = Maybe.fromFuture();
src = Maybe.fromCompletable()
</code></pre><p>--&#x5173;&#x4E8E;Disposalble</p>
<ul>
<li>&#x6240;&#x6709;subscribe&#x65B9;&#x6CD5;&#x90FD;&#x8FD4;&#x56DE;&#x4E86;&#x4E00;&#x4E2A;Disposable disposable&#x5BF9;&#x8C61;</li>
<li>d.dispose()&#xFF1A;&#x53D6;&#x6D88;&#x8BA2;&#x9605;</li>
<li>d.isDisposed();</li>
</ul>
<p>--&#x5173;&#x4E8E;Backpressure</p>
<ul>
<li>Flowable&#x89E3;&#x51B3;&#x4E86;Backpressure&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x5373;&#x751F;&#x4EA7;&#x8FC7;&#x5FEB;&#xFF0C;&#x6D88;&#x8D39;&#x8FC7;&#x6162;&#x7684;&#x95EE;&#x9898;</li>
<li><a href="http://blog.csdn.net/jdsjlzx/article/details/51868640" target="_blank">http://blog.csdn.net/jdsjlzx/article/details/51868640</a></li>
<li>BackpressureStrategy.BUFFER  &#x7F13;&#x5B58;&#x6240;&#x6709;&#x7684;item&#xFF08;onNext&#x8FD4;&#x56DE;&#x7684;value&#xFF09;&#xFF0C;&#x76F4;&#x5230;&#x88AB;consume</li>
<li>BackpressureStrategy.DROP    &#x5C06;&#x6700;&#x8FD1;&#x7684;item&#x4E22;&#x5F03;&#xFF08;&#x5982;&#x679C;downstream&#x4E0D;&#x80FD;&#x4FDD;&#x5B58;&#x7684;&#x8BDD;&#xFF09;</li>
<li>BackpressureStrategy.ERROR   &#x629B;&#x51FA;MissingBackpressureException&#xFF0C;&#x8868;&#x793A;&#x751F;&#x4EA7;&#x592A;&#x5FEB;&#xFF0C;&#x6D88;&#x8D39;&#x8005;&#x8DDF;&#x4E0D;&#x4E0A;&#xFF08;can&apos;t keep up&#xFF09;</li>
<li>BackpressureStrategy.LATEST  &#x53EA;&#x4FDD;&#x7559;&#x6700;&#x8FD1;&#x7684;&#xFF0C;&#x4E4B;&#x524D;&#x6CA1;&#x6709;&#x88AB;consume&#x7684;&#xFF0C;&#x4F1A;&#x88AB;overwrite</li>
<li>BackpressureStrategy.MISSING<ul>
<li>OnNext events are written without any buffering or dropping</li>
<li>Downstream has to deal with any overflow</li>
<li>Useful when one applies one of the custom-parameter onBackpressureXXX operators</li>
</ul>
</li>
</ul>
<p>&#x6D4B;&#x8BD5;backpressure</p>
<pre><code>Flowable.create(new FlowableOnSubscribe&lt;Integer&gt;() {

        @Override
        public void subscribe(FlowableEmitter&lt;Integer&gt; e) throws Exception {

            for(int i=0;i&lt;10000;i++){
                e.onNext(i);
            }
            e.onComplete();
        }
    }, FlowableEmitter.BackpressureMode.ERROR) //&#x6307;&#x5B9A;&#x80CC;&#x538B;&#x5904;&#x7406;&#x7B56;&#x7565;&#xFF0C;&#x629B;&#x51FA;&#x5F02;&#x5E38;
            .subscribeOn(Schedulers.computation())
            .observeOn(Schedulers.newThread())
            .subscribe(new Consumer&lt;Integer&gt;() {
                @Override
                public void accept(Integer integer) throws Exception {
                    Log.d(&quot;JG&quot;, integer.toString());
                    Thread.sleep(1000);
                }
            }, new Consumer&lt;Throwable&gt;() {
                @Override
                public void accept(Throwable throwable) throws Exception {
                    Log.d(&quot;JG&quot;,throwable.toString());
                }
            });
</code></pre><p>Flowable&#x662F;RxJava2.x&#x4E2D;&#x65B0;&#x589E;&#x7684;&#x7C7B;&#xFF0C;&#x4E13;&#x95E8;&#x7528;&#x4E8E;&#x5E94;&#x5BF9;&#x80CC;&#x538B;&#xFF08;Backpressure&#xFF09;&#x95EE;&#x9898;&#xFF0C;&#x4F46;&#x8FD9;&#x5E76;&#x4E0D;&#x662F;RxJava2.x&#x4E2D;&#x65B0;&#x5F15;&#x5165;&#x7684;&#x6982;&#x5FF5;&#x3002;
&#x6240;&#x8C13;&#x80CC;&#x538B;&#xFF0C;&#x5373;&#x751F;&#x4EA7;&#x8005;&#x7684;&#x901F;&#x5EA6;&#x5927;&#x4E8E;&#x6D88;&#x8D39;&#x8005;&#x7684;&#x901F;&#x5EA6;&#x5E26;&#x6765;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x6BD4;&#x5982;&#x5728;Android&#x4E2D;&#x5E38;&#x89C1;&#x7684;&#x70B9;&#x51FB;&#x4E8B;&#x4EF6;&#xFF0C;&#x70B9;&#x51FB;&#x8FC7;&#x5FEB;&#x5219;&#x4F1A;&#x9020;&#x6210;&#x70B9;&#x51FB;&#x4E24;&#x6B21;
&#x7684;&#x6548;&#x679C;&#x3002;
&#x6211;&#x4EEC;&#x77E5;&#x9053;&#xFF0C;&#x5728;RxJava1.x&#x4E2D;&#x80CC;&#x538B;&#x63A7;&#x5236;&#x662F;&#x7531;Observable&#x5B8C;&#x6210;&#x7684;&#xFF0C;&#x4F7F;&#x7528;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code>Observable.range(1,10000)
        .onBackpressureDrop()
        .subscribe(integer -&gt; Log.d(&quot;JG&quot;,integer.toString()));
</code></pre><p>&#x800C;&#x5728;RxJava2.x&#x4E2D;&#x5C06;&#x5176;&#x72EC;&#x7ACB;&#x4E86;&#x51FA;&#x6765;&#xFF0C;&#x53D6;&#x540D;&#x4E3A;Flowable&#x3002;&#x56E0;&#x6B64;&#xFF0C;&#x539F;&#x5148;&#x7684;Observable&#x5DF2;&#x7ECF;&#x4E0D;&#x5177;&#x5907;&#x80CC;&#x538B;&#x5904;&#x7406;&#x80FD;&#x529B;&#x3002;
&#x901A;&#x8FC7;Flowable&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x81EA;&#x5B9A;&#x4E49;&#x80CC;&#x538B;&#x5904;&#x7406;&#x7B56;&#x7565;&#x3002;</p>
<p>&#x8FD8;&#x9700;&#x8981;&#x6CE8;&#x610F;&#x7684;&#x4E00;&#x70B9;&#x5728;&#x4E8E;&#xFF0C;Flowable&#x5E76;&#x4E0D;&#x662F;&#x8BA2;&#x9605;&#x5C31;&#x5F00;&#x59CB;&#x53D1;&#x9001;&#x6570;&#x636E;&#xFF0C;&#x800C;&#x662F;&#x9700;&#x7B49;&#x5230;&#x6267;&#x884C;Subscription#request&#x624D;&#x80FD;&#x5F00;&#x59CB;&#x53D1;&#x9001;&#x6570;&#x636E;&#x3002;&#x5F53;&#x7136;&#xFF0C;&#x4F7F;&#x7528;&#x7B80;&#x5316;subscribe&#x8BA2;&#x9605;&#x65B9;&#x6CD5;&#x4F1A;&#x9ED8;&#x8BA4;&#x6307;&#x5B9A;Long.MAX_VALUE</p>
<pre><code>Flowable.range(1,10).subscribe(new Subscriber&lt;Integer&gt;() {
    @Override
    public void onSubscribe(Subscription s) {
        s.request(Long.MAX_VALUE);//&#x8BBE;&#x7F6E;&#x8BF7;&#x6C42;&#x6570;&#xFF0C;&#x6CA1;&#x8FD9;&#x4E00;&#x53E5;&#x5C31;&#x4E0D;&#x4F1A;&#x5F00;&#x59CB;&#x53D1;&#x5E03;item&#xFF0C;&#x4E5F;&#x5C31;&#x4E0D;&#x4F1A;&#x6536;&#x5230;&#x8BA2;&#x9605;
    }

    @Override
    public void onNext(Integer integer) {

    }

    @Override
    public void onError(Throwable t) {

    }

    @Override
    public void onComplete() {

    }
});
</code></pre><p>3 &#x9519;&#x8BEF;&#x5904;&#x7406;</p>
<p><code>1 &#x5728;&#x6570;&#x636E;&#x6E90;&#x91CC;&#x53D1;&#x751F;&#x5F02;&#x5E38;</code></p>
<ul>
<li>&#x8FD9;&#x91CC;&#x9762;&#x7684;&#x5F02;&#x5E38;&#xFF0C;&#x4F1A;&#x4F20;&#x5230;onError&#x91CC;&#xFF0C;&#x4ECE;&#x800C;&#x4F20;&#x7ED9;Consumer<throwable></throwable></li>
<li>&#x4E0D;&#x7BA1;&#x662F;&#x4E0D;&#x662F;&#x663E;&#x5F0F;&#x7684;&#x8C03;&#x7528;&#x4E86;onError&#xFF0C;&#x90FD;&#x4F1A;&#x6FC0;&#x6D3B;subscriber&#x91CC;&#x7684;onError</li>
<li>&#x51FA;&#x4E86;Error&#x5C31;&#x4E0D;&#x4F1A;&#x8D70;onComplete&#x4E86;</li>
<li>&#x5982;&#x679C;&#x6570;&#x636E;&#x6E90;&#x91CC;&#x7684;onNext&#x4E4B;&#x95F4;&#x6709;&#x5EF6;&#x65F6;&#xFF0C;&#x5728;&#x672C;&#x4F8B;&#x4E2D;&#xFF0C;1&#x548C;2&#x8FD8;&#x662F;&#x4F1A;&#x53D1;&#x51FA;&#x6765;&#x7684;</li>
<li>&#x5982;&#x679C;&#x6570;&#x636E;&#x6E90;&#x91CC;&#x7684;onNext&#x4E4B;&#x95F4;&#x6CA1;&#x6709;&#x5EF6;&#x65F6;&#xFF0C;&#x5728;&#x672C;&#x4F8B;&#x4E2D;&#xFF0C;1&#x548C;2&#x4E5F;&#x53D1;&#x4E0D;&#x51FA;&#x6765;&#xFF0C;&#x8FD9;&#x662F;&#x4E3A;&#x4EC0;&#x4E48;&#xFF1F;&#xFF1F;</li>
</ul>
<p>&#x6355;&#x6349;&#x5F02;&#x5E38;&#xFF0C;&#x4EE5;&#x4E0B;&#x65B9;&#x5F0F;&#x80FD;&#x591F;&#x622A;&#x83B7;&#x8FD9;&#x91CC;&#x7684;&#x5F02;&#x5E38;&#xFF0C;&#x5E76;&#x80FD;&#x5C1D;&#x8BD5;&#x4FEE;&#x6B63;&#x6570;&#x636E;&#x6D41;&#xFF1A;</p>
<ul>
<li><code>onErrorResumeNext</code>(Observable.just(&quot;onErrorResumeNext-111&quot;, &quot;onErrorResumeNext-222&quot;))<ul>
<li>&#x4F1A;&#x7528;&#x5907;&#x7528;Observable&#x4EE3;&#x66FF;&#x9519;&#x8BEF;&#xFF0C;&#x5E76;&#x7EE7;&#x7EED;&#x53D1;&#x9001;item</li>
<li>&#x8FD9;&#x91CC;&#x7684;&#x4F8B;&#x5B50;&#x91CC;&#xFF0C;onNext&#x4F1A;&#x6536;&#x5230;&#xFF1A;1, 2, onErrorResumeNext-111,onErrorResumeNext-222&#xFF0C;&#x7136;&#x540E;&#x8D70;onComplete</li>
</ul>
</li>
<li><code>onExceptionResumeNext</code><ul>
<li>&#x548C;onErrorResumeNext&#x4E00;&#x6837;&#xFF0C;&#x53EA;&#x4E0D;&#x8FC7;&#x53EA;&#x80FD;&#x6355;&#x6349;Exception</li>
</ul>
</li>
<li>&#x4E0A;&#x9762;&#x4E24;&#x4E2A;&#x65B9;&#x5F0F;&#x6CA1;&#x529E;&#x6CD5;&#x77E5;&#x9053;&#x53D1;&#x751F;&#x4E86;&#x4EC0;&#x4E48;&#x5F02;&#x5E38;</li>
<li><code>onErrorReturn</code>&#xFF1A;&#x5728;&#x53D1;&#x751F;&#x5F02;&#x5E38;&#x65F6;&#xFF0C;&#x53D1;&#x5C04;&#x4E00;&#x6761;&#x6570;&#x636E;&#xFF0C;&#x8D70;onNext&#xFF0C;&#x518D;&#x8D70;onComplete&#xFF0C;&#x800C;&#x4E14;&#x53EF;&#x4EE5;&#x62FF;&#x5230;&#x5F02;&#x5E38;<pre><code>onErrorReturn(new Function&lt;Throwable, String&gt;() {
  @Override
  public String apply(Throwable throwable) throws Exception {
      return &quot;onErrorReturn&#x4E86;&quot;;
  }
})
</code></pre></li>
</ul>
<p>&#x91CD;&#x8BD5;&#xFF1A;</p>
<ul>
<li><code>retry</code>&#xFF1A;.retry(3)&#x91CD;&#x8BD5;3&#x6B21;&#xFF0C;&#x5F53;&#x539F;&#x59CB;Observable&#x5728;&#x9047;&#x5230;&#x9519;&#x8BEF;&#x65F6;&#x8FDB;&#x884C;&#x91CD;&#x8BD5;&#xFF0C;&#x6CE8;&#x610F;retry3&#x6B21;&#xFF0C;&#x5B9E;&#x9645;&#x4E0A;&#x4E00;&#x5171;&#x53D1;&#x4E86;4&#x6B21;&#x3002;&#x3002;&#x3002;<ul>
<li>&#x5931;&#x8D25;&#x4E00;&#x6B21;&#xFF0C;retry&#x4E86;3&#x6B21;&#x4E4B;&#x540E;&#xFF0C;&#x5982;&#x679C;&#x8FD8;&#x662F;&#x5931;&#x8D25;&#xFF0C;&#x4F1A;&#x6FC0;&#x6D3B;onError&#xFF0C;&#x5728;&#x6B64;&#x4E4B;&#x524D;&#x4E0D;&#x4F1A;&#x6FC0;&#x6D3B;</li>
<li>&#x5982;&#x679C;&#x91CD;&#x8BD5;&#x6210;&#x529F;&#x4E86;&#xFF0C;&#x90A3;&#x5C31;onComplete&#x4E86;</li>
</ul>
</li>
<li>&apos;retry(count, Predicate)&apos;&#xFF1A;Predicate&#x53EF;&#x4EE5;&#x7528;&#x6765;&#x6839;&#x636E;&#x5F02;&#x5E38;&#x7C7B;&#x578B;&#x51B3;&#x5B9A;&#x662F;&#x5426;&#x7EE7;&#x7EED;&#x91CD;&#x8BD5;&#xFF0C;&#x8FD4;&#x56DE;true&#x5C31;&#x662F;&#x8FD8;&#x8981;&#x91CD;&#x8BD5;<pre><code>.retry(3, new Predicate&lt;Throwable&gt;() {
  @Override
  public boolean test(Throwable throwable) throws Exception {
      return false;
  }
})
</code></pre></li>
<li><code>retry(BiPredicate&lt;Integer, Throwable&gt;)</code>&#xFF1A;&#x7528;&#x6765;&#x6839;&#x636E;&#x91CD;&#x8BD5;&#x6B21;&#x6570;&#x548C;&#x5F02;&#x5E38;&#xFF0C;&#x51B3;&#x5B9A;&#x662F;&#x5426;&#x8981;&#x7EE7;&#x7EED;&#x91CD;&#x8BD5;<pre><code>retry(new BiPredicate&lt;Integer, Throwable&gt;() {
      @Override
      public boolean test(Integer integer, Throwable throwable) throws Exception {
          if(integer &lt;= 2){
              return true;
          }
          return false;
      }
  })
</code></pre></li>
<li><p><code>retry(BooleanSupplier)</code>&#xFF1A;&#x91CD;&#x8BD5;&#x76F4;&#x5230;&#x6EE1;&#x8DB3;&#x6761;&#x4EF6;&#xFF0C;&#x6761;&#x4EF6;&#x5728;getAsBoolean&#x91CC;&#x81EA;&#x5DF1;&#x5224;&#x65AD;</p>
<pre><code>retryUntil(new BooleanSupplier() {
      @Override
      public boolean getAsBoolean() throws Exception {
          boolean shouldStopRetry = true;
          return shouldStopRetry;
      }
  })
</code></pre></li>
<li><p><code>retryWhen</code>&#xFF1A;&#x8FD9;&#x4E2A;&#x662F;&#x6839;&#x636E;&#x4E00;&#x4E2A;Observable&#x662F;&#x5426;&#x53D1;item&#x6765;&#x51B3;&#x5B9A;&#x662F;&#x5426;&#x91CD;&#x8BD5;&#xFF0C;&#x53D1;&#x4E00;&#x4E2A;item&#x5C31;&#x91CD;&#x8BD5;&#x4E00;&#x6B21;</p>
<ul>
<li>&#x8FD9;&#x4E2A;&#x6BD4;&#x8F83;&#x5947;&#x602A;&#xFF0C;interval&#x4F1A;&#x4E00;&#x76F4;&#x91CD;&#x8BD5;&#xFF0C;timer&#x4E0D;&#x4F1A;&#x91CD;&#x8BD5;&#xFF0C;just(1, 2, 3)&#x53EA;&#x91CD;&#x8BD5;&#x4E86;&#x4E24;&#x6B21;&#xFF0C;&#x6240;&#x4EE5;&#x603B;&#x662F;&#x5C11;&#x4E00;&#x6B21;</li>
<li>&#x800C;&#x4E14;&#x8FD8;&#x4F1A;&#x8C03;&#x7528;onComplete&#xFF0C;&#x5367;&#x69FD;</li>
<li>timer&#x6CA1;&#x6FC0;&#x6D3B;&#x91CD;&#x8BD5;&#xFF0C;&#x4E5F;&#x6CA1;&#x6FC0;&#x6D3B;onComplete</li>
<li>interval&#x4E0D;&#x4F1A;&#x505C;&#xFF0C;&#x6CA1;&#x8BD5;</li>
<li>just(1, 2, 3)&#xFF0C;&#x6FC0;&#x6D3B;&#x4E86;onCOmplete</li>
</ul>
</li>
</ul>
<pre><code>Flowable.create(new FlowableOnSubscribe&lt;String&gt;() {
        @Override
        public void subscribe(FlowableEmitter&lt;String&gt; e) throws Exception {
            e.onNext(&quot;1&quot;);
            e.onNext(&quot;2&quot;);
            if(1 + 1 == 2){
                throw new RuntimeException(&quot;Don&apos;t worry, just test&quot;);   ///---1 &#x6570;&#x636E;&#x6E90;
            }else{
                e.onComplete();
            }
        }
    }, BackpressureStrategy.BUFFER)
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(new Consumer&lt;String&gt;() {
                   @Override
                   public void accept(String s) throws Exception {
                       if (&quot;3&quot;.equals(s)) {
                           throw new RuntimeException(&quot;Don&apos;t worry, just test&quot;);   ///---2  onNext
                       } else {
                           notifyy(s);
                       }
                   }
               }, new Consumer&lt;Throwable&gt;() {
                   @Override
                   public void accept(Throwable throwable) throws Exception {
                       ToasterDebug.toastShort(&quot;&#x51FA;&#x5F02;&#x5E38;&#x4E86;&#xFF1A;&quot; + throwable.getMessage());  ///---3 onError
                       throwable.printStackTrace();
                   }
               },
            new Action() {
                @Override
                public void run() throws Exception {
                    notifyy(&quot;onComplete---&#x7ED3;&#x675F;&#x4E86;&#xFF01;@@&quot;);               ///---4 onComplete
                }
            },
            FlowableInternalHelper.RequestMax.INSTANCE);
</code></pre><p>3 &#x7EBF;&#x7A0B;&#x8C03;&#x5EA6;&#xFF1A;subscribeOn&#x548C;observeOn</p>
<p><a href="http://blog.csdn.net/maplejaw_/article/details/52381395" target="_blank">http://blog.csdn.net/maplejaw_/article/details/52381395</a></p>
<p>subscribeOn&#x7528;&#x4E8E;&#x6307;&#x5B9A;subscribe()&#x65F6;&#x6240;&#x53D1;&#x751F;&#x7684;&#x7EBF;&#x7A0B;,&#x4ECE;&#x6E90;&#x7801;&#x89D2;&#x5EA6;&#x53EF;&#x4EE5;&#x770B;&#x51FA;&#xFF0C;&#x5185;&#x90E8;&#x7EBF;&#x7A0B;&#x8C03;&#x5EA6;&#x662F;&#x901A;&#x8FC7;ObservableSubscribeOn&#x6765;&#x5B9E;&#x73B0;&#x7684;&#x3002;</p>
<pre><code>public final Observable&lt;T&gt; subscribeOn(Scheduler scheduler) {
    ObjectHelper.requireNonNull(scheduler, &quot;scheduler is null&quot;);
    return RxJavaPlugins.onAssembly(new ObservableSubscribeOn&lt;T&gt;(this, scheduler));
}

ObservableSubscribeOn&#x7684;&#x6838;&#x5FC3;&#x6E90;&#x7801;&#x5728;subscribeActual&#x65B9;&#x6CD5;&#x4E2D;&#xFF0C;&#x901A;&#x8FC7;&#x4EE3;&#x7406;&#x7684;&#x65B9;&#x5F0F;&#x4F7F;&#x7528;SubscribeOnObserver&#x5305;&#x88C5;Observer&#x540E;&#xFF0C;&#x8BBE;&#x7F6E;Disposable&#x6765;&#x5C06;subscribe&#x5207;&#x6362;&#x5230;Scheduler&#x7EBF;&#x7A0B;&#x4E2D;

@Override
public void subscribeActual(final Observer&lt;? super T&gt; s) {
    final SubscribeOnObserver&lt;T&gt; parent = new SubscribeOnObserver&lt;T&gt;(s);

    s.onSubscribe(parent); //&#x56DE;&#x8C03;Disposable

    parent.setDisposable(scheduler.scheduleDirect(new Runnable() { //&#x8BBE;&#x7F6E;`Disposable`
        @Override
        public void run() {
            source.subscribe(parent); //&#x4F7F;Observable&#x7684;subscribe&#x53D1;&#x751F;&#x5728;Scheduler&#x7EBF;&#x7A0B;&#x4E2D;
        }
    }));
}
</code></pre><p>observeOn&#x65B9;&#x6CD5;&#x7528;&#x4E8E;&#x6307;&#x5B9A;&#x4E0B;&#x6E38;Observer&#x56DE;&#x8C03;&#x53D1;&#x751F;&#x7684;&#x7EBF;&#x7A0B;</p>
<pre><code>public final Observable&lt;T&gt; observeOn(Scheduler scheduler, boolean delayError, int bufferSize) {
     //..
     //&#x9A8C;&#x8BC1;&#x5B89;&#x5168;
    return RxJavaPlugins.onAssembly(new ObservableObserveOn&lt;T&gt;(this, scheduler, delayError, bufferSize));
}

&#x4E3B;&#x8981;&#x5B9E;&#x73B0;&#x5728;ObservableObserveOn&#x4E2D;&#x7684;subscribeActual,&#x53EF;&#x4EE5;&#x770B;&#x51FA;&#xFF0C;
&#x4E0D;&#x540C;&#x4E8E;subscribeOn,&#x6CA1;&#x6709;&#x5C06;suncribe&#x64CD;&#x4F5C;&#x5168;&#x90E8;&#x5207;&#x6362;&#x5230;Scheduler&#x4E2D;&#xFF0C;
&#x800C;&#x662F;&#x901A;&#x8FC7;ObserveOnSubscriber&#x4E0E;Scheduler&#x914D;&#x5408;&#xFF0C;&#x901A;&#x8FC7;schedule()&#x8FBE;&#x5230;&#x5207;&#x6362;
&#x4E0B;&#x6E38;Observer&#x56DE;&#x8C03;&#x53D1;&#x751F;&#x7684;&#x7EBF;&#x7A0B;&#xFF0C;&#x8FD9;&#x4E00;&#x70B9;&#x4E0E;RxJava1.x&#x5B9E;&#x73B0;&#x51E0;&#x4E4E;&#x76F8;&#x540C;&#x3002;
&#x5173;&#x4E8E;ObserveOnSubscriber&#x7684;&#x6E90;&#x7801;&#x8FD9;&#x91CC;&#x4E0D;&#x518D;&#x91CD;&#x590D;&#x63CF;&#x8FF0;&#x4E86;
@Override
protected void subscribeActual(Observer&lt;? super T&gt; observer) {
    if (scheduler instanceof TrampolineScheduler) {
        source.subscribe(observer);
    } else {
        Scheduler.Worker w = scheduler.createWorker();

        source.subscribe(new ObserveOnSubscriber&lt;T&gt;(observer, w, delayError, bufferSize));
    }
}
</code></pre><p>4 Action&#x548C;Func&#x63A5;&#x53E3;</p>
<p>Consumer&#x5373;&#x6D88;&#x8D39;&#x8005;&#xFF0C;&#x7528;&#x4E8E;&#x63A5;&#x6536;&#x5355;&#x4E2A;&#x503C;&#xFF0C;BiConsumer&#x5219;&#x662F;&#x63A5;&#x6536;&#x4E24;&#x4E2A;&#x503C;&#xFF0C;Function&#x7528;&#x4E8E;&#x53D8;&#x6362;&#x5BF9;&#x8C61;&#xFF0C;Predicate&#x7528;&#x4E8E;&#x5224;&#x65AD;&#x3002;&#x8FD9;&#x4E9B;&#x63A5;&#x53E3;&#x547D;&#x540D;&#x5927;&#x591A;&#x53C2;&#x7167;&#x4E86;Java8&#xFF0C;&#x719F;&#x6089;Java8&#x65B0;&#x7279;&#x6027;&#x7684;&#x5E94;&#x8BE5;&#x90FD;&#x77E5;&#x9053;&#x610F;&#x601D;&#xFF0C;&#x8FD9;&#x91CC;&#x4E5F;&#x5C31;&#x4E0D;&#x518D;&#x8D58;&#x8FF0;&#x4E86;</p>
<p><img src="img/func.png" alt=""></p>
<p>5 Subject/Processor</p>
<p>Processor&#x548C;Subject&#x7684;&#x4F5C;&#x7528;&#x662F;&#x76F8;&#x540C;&#x7684;&#x3002;&#x5173;&#x4E8E;Subject&#x90E8;&#x5206;&#xFF0C;RxJava1.x&#x4E0E;RxJava2.x&#x5728;&#x7528;&#x6CD5;&#x4E0A;&#x6CA1;&#x6709;&#x663E;&#x8457;&#x533A;&#x522B;&#xFF0C;&#x8FD9;&#x91CC;&#x5C31;&#x4E0D;&#x4ECB;&#x7ECD;&#x4E86;&#x3002;&#x5176;&#x4E2D;Processor&#x662F;RxJava2.x&#x65B0;&#x589E;&#x7684;&#xFF0C;&#x7EE7;&#x627F;&#x81EA;Flowable,&#x6240;&#x4EE5;&#x652F;&#x6301;&#x80CC;&#x538B;&#x63A7;&#x5236;&#x3002;&#x800C;Subject&#x5219;&#x4E0D;&#x652F;&#x6301;&#x80CC;&#x538B;&#x63A7;&#x5236;&#x3002;&#x4F7F;&#x7528;&#x5982;&#x4E0B;</p>
<pre><code>//Subject
AsyncSubject&lt;String&gt; subject = AsyncSubject.create();
subject.subscribe(o -&gt; Log.d(&quot;JG&quot;,o));//three
subject.onNext(&quot;one&quot;);
subject.onNext(&quot;two&quot;);
subject.onNext(&quot;three&quot;);
subject.onComplete();

//Processor
AsyncProcessor&lt;String&gt; processor = AsyncProcessor.create();
processor.subscribe(o -&gt; Log.d(&quot;JG&quot;,o)); //three
processor.onNext(&quot;one&quot;);
processor.onNext(&quot;two&quot;);
processor.onNext(&quot;three&quot;);
processor.onComplete();
</code></pre><p>8 &#x81EA;&#x5B9A;&#x4E49;Publisher</p>
<p>9 &#x64CD;&#x4F5C;&#x7B26;</p>
<p>-------------------&#x521B;&#x5EFA;&#x7CFB;&#x5217;&#x64CD;&#x4F5C;</p>
<ul>
<li>just<ul>
<li>1&#x5230;9&#x4E2A;&#x53C2;&#x6570;&#xFF0C;&#x6BCF;&#x4E2A;&#x53C2;&#x6570;&#x5C31;&#x662F;&#x4E00;&#x4E2A;item</li>
</ul>
</li>
<li>from<ul>
<li>&#x5C06;&#x6BCF;&#x4E2A;&#x5143;&#x7D20;&#x4F5C;&#x4E3A;&#x4E00;&#x4E2A;item</li>
</ul>
</li>
<li>repeat<ul>
<li>&#x603B;&#x662F;&#x4F1A;&#x8C03;&#x7528;emitter&#x7684;subscribe&#xFF0C;&#x6240;&#x4EE5;&#x603B;&#x662F;&#x4F1A;&#x53BB;Model&#x5C42;&#x62FF;&#x6570;&#x636E;</li>
<li>&#x53EA;&#x4F1A;complete&#x4E00;&#x6B21;&#xFF01;</li>
<li>&#x9047;&#x5230;error&#x5C31;&#x505C;&#x6B62;</li>
</ul>
</li>
<li>repeatWhen<ul>
<li>&#x600E;&#x4E48;&#x4E2A;&#x610F;&#x601D;</li>
</ul>
</li>
</ul>
<p>take
interval
map
flat
flatMap</p>
<p>10 &#x81EA;&#x5B9A;&#x4E49;&#x64CD;&#x4F5C;&#x7B26;</p>

                                
                                </section>
                            
    </div>
    <div class="search-results">
        <div class="has-results">
            
            <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
            <ul class="search-results-list"></ul>
            
        </div>
        <div class="no-results">
            
            <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
            
        </div>
    </div>
</div>

                        </div>
                    </div>
                
            </div>

            
                
                <a href="mvp.html" class="navigation navigation-prev " aria-label="Previous page: MVP">
                    <i class="fa fa-angle-left"></i>
                </a>
                
                
                <a href="lang.html" class="navigation navigation-next " aria-label="Next page: 常用工具类">
                    <i class="fa fa-angle-right"></i>
                </a>
                
            
        
    </div>

    <script>
        var gitbook = gitbook || [];
        gitbook.push(function() {
            gitbook.page.hasChanged({"page":{"title":"RxJava","level":"2.2","depth":1,"next":{"title":"常用工具类","level":"2.3","depth":1,"path":"lang.md","ref":"lang.md","articles":[]},"previous":{"title":"MVP","level":"2.1","depth":1,"path":"mvp.md","ref":"mvp.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"rxjava.md","mtime":"2017-04-09T15:06:34.180Z","type":"markdown"},"gitbook":{"version":"3.2.2","time":"2017-04-09T17:03:25.521Z"},"basePath":".","book":{"language":""}});
        });
    </script>
</div>

        
    <script src="gitbook/gitbook.js"></script>
    <script src="gitbook/theme.js"></script>
    
        
        <script src="gitbook/gitbook-plugin-search/search-engine.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-search/search.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-sharing/buttons.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
        
    

    </body>
</html>

